package com.zy.springboot.com;

import com.alibaba.fastjson.JSONObject;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.JdbcUtils;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

/**
 * <B>系统名称：</B>通用系统功能<BR>
 * <B>模块名称：</B>数据访问通用功能<BR>
 * <B>中文类名：</B>JSON数据行映射器<BR>
 * <B>概要说明：</B><BR>
 * @Version: V1.0.0
 */
public class JsonRowMapper implements RowMapper<JSONObject> {

    /**
     * <B>方法名称：</B>映射行数据<BR>
     * <B>概要说明：</B><BR>
     * @param rs 结果集
     * @param row 行号
     * @return JSONObject 数据
     * @throws SQLException SQL异常错误
     * @Version: V1.0.0
     * @see org.springframework.jdbc.core.RowMapper#mapRow(ResultSet,
     *      int)
     */
    @Override
    public JSONObject mapRow(ResultSet rs, int row) throws SQLException {
        String key = null;
        Object obj = null;
        JSONObject json = new JSONObject();
        ResultSetMetaData rsmd = rs.getMetaData();
        int count = rsmd.getColumnCount();
        for (int i = 1; i <= count; i++) {
            key = JdbcUtils.lookupColumnName(rsmd, i);
            /*
            * 查询时针对数据库存在空值和null的情况，这里做了统一处理，必须设置SerializerFeature.WriteMapNullValue，不然空字段对应的key 和 value 会消失
            *
            * */
            obj = JdbcUtils.getResultSetValue(rs, i);
//            obj = JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);

//
//            if (rsmd.getColumnTypeName(i).equals("VARCHAR") || rsmd.getColumnTypeName(i).equals("CHAR")){
//                if (null == obj || "".equals(obj)) {
//                    json.put(key,"");
//                } else {
//                    json.put(key,obj);
//                }
//            } else if(rsmd.getColumnTypeName(i).equals("DATETIME") || rsmd.getColumnTypeName(i).equals("TIMESTAMP")){
//                //暂时不加入数据中
//            } else {
//                json.put(key,obj);
//            }
//                json.put(key,obj);
//                String str = json.getString(key);
//                String[] strs = str.split("\"");
//            System.out.println(strs.length);
//                if (strs.length>1){
//                    System.out.println(strs[1]);
//                    json.put(key,strs[1]);
//                }
            json.put(key,obj == null ? "":obj);

        }
        return json;
    }
}
